From 42d239f6d5c97bd0c4a9a3e1359a48374dfd7ebe Mon Sep 17 00:00:00 2001 From: Federico Mena Quintero Date: Tue, 11 Dec 2012 15:52:17 -0600 Subject: [PATCH] Remove gtk_places_sidebar_set_show_cwd(), implement that in the file chooser This removes more idiosyncratic API from the sidebar. Signed-off-by: Federico Mena Quintero --- gtk/gtkfilechooserdefault.c | 60 ++++++++++++++++++++++++++++++++++++- gtk/gtkplacessidebar.c | 59 +----------------------------------- gtk/gtkplacessidebar.h | 2 -- 3 files changed, 60 insertions(+), 61 deletions(-) diff --git a/gtk/gtkfilechooserdefault.c b/gtk/gtkfilechooserdefault.c index 330c591d0a..776d7baac8 100644 --- a/gtk/gtkfilechooserdefault.c +++ b/gtk/gtkfilechooserdefault.c @@ -1318,7 +1318,6 @@ shortcuts_pane_create (GtkFileChooserDefault *impl, GtkSizeGroup *size_group) { impl->places_sidebar = gtk_places_sidebar_new (); - gtk_places_sidebar_set_show_cwd (GTK_PLACES_SIDEBAR (impl->places_sidebar), TRUE); g_signal_connect (impl->places_sidebar, "open-location", G_CALLBACK (places_sidebar_open_location_cb), @@ -3804,6 +3803,63 @@ set_startup_mode (GtkFileChooserDefault *impl) } } +static gboolean +shortcut_exists (GtkFileChooserDefault *impl, GFile *needle) +{ + GSList *haystack; + GSList *l; + gboolean exists; + + exists = FALSE; + + haystack = gtk_places_sidebar_list_shortcuts (GTK_PLACES_SIDEBAR (impl->places_sidebar)); + for (l = haystack; l; l = l->next) + { + GFile *hay; + + hay = G_FILE (l->data); + if (g_file_equal (hay, needle)) + { + exists = TRUE; + break; + } + } + g_slist_free_full (haystack, g_object_unref); + + return exists; +} + +static void +add_cwd_to_sidebar_if_needed (GtkFileChooserDefault *impl) +{ + char *cwd; + GFile *cwd_file; + GFile *home_file; + + cwd = g_get_current_dir (); + cwd_file = g_file_new_for_path (cwd); + g_free (cwd); + + if (shortcut_exists (impl, cwd_file)) + goto out; + + home_file = g_file_new_for_path (g_get_home_dir ()); + + /* We only add an item for $CWD if it is different from $HOME. This way, + * applications which get launched from a shell in a terminal (by someone who + * knows what they are doing) will get an item for $CWD in the places sidebar, + * and "normal" applications launched from the desktop shell (whose $CWD is + * $HOME) won't get any extra clutter in the sidebar. + */ + if (!g_file_equal (home_file, cwd_file)) + gtk_places_sidebar_add_shortcut (GTK_PLACES_SIDEBAR (impl->places_sidebar), cwd_file); + + g_object_unref (home_file); + + out: + g_object_unref (cwd_file); +} + /* GtkWidget::map method */ static void gtk_file_chooser_default_map (GtkWidget *widget) @@ -3818,6 +3874,8 @@ gtk_file_chooser_default_map (GtkWidget *widget) settings_load (impl); + add_cwd_to_sidebar_if_needed (impl); + if (impl->operation_mode == OPERATION_MODE_BROWSE) { switch (impl->reload_state) diff --git a/gtk/gtkplacessidebar.c b/gtk/gtkplacessidebar.c index 12e3ee3d0b..a59da607e2 100644 --- a/gtk/gtkplacessidebar.c +++ b/gtk/gtkplacessidebar.c @@ -139,7 +139,6 @@ struct _GtkPlacesSidebar { guint show_properties : 1; guint show_trash : 1; guint trash_is_full : 1; - guint show_cwd : 1; guint accept_uri_drops : 1; }; @@ -799,55 +798,8 @@ update_places (GtkPlacesSidebar *sidebar) g_object_unref (icon); } - /* compute the $HOME URI here; we'll use it when we generate the $CWD item as well as the $HOME item */ - - home_uri = get_home_directory_uri (); - - /* cwd */ - if (sidebar->show_cwd) { - char *cwd; - GFile *home_file; - - cwd = g_get_current_dir (); - root = g_file_new_for_path (cwd); - g_free (cwd); - - home_file = g_file_new_for_uri (home_uri); - - if (!g_file_equal (home_file, root)) { - GFileInfo *info; - - info = g_file_query_info (root, - "standard::display-name,standard::icon", - G_FILE_QUERY_INFO_NONE, - NULL, - NULL); /* NULL-GError */ - - /* FIXME: we are getting file info synchronously. We may want to do it async at some point. */ - if (info) { - bookmark_name = g_strdup (g_file_info_get_display_name (info)); - icon = g_file_info_get_icon (info); /* FIXME: use symbolic icon */ - mount_uri = g_file_get_uri (root); - tooltip = g_file_get_parse_name (root); - - add_place (sidebar, PLACES_BUILT_IN, - SECTION_COMPUTER, - bookmark_name, icon, mount_uri, - NULL, NULL, NULL, 0, - tooltip); - - g_free (mount_uri); - g_free (tooltip); - g_free (bookmark_name); - - g_object_unref (info); - } - } - - g_object_unref (home_file); - } - /* home folder */ + home_uri = get_home_directory_uri (); icon = g_themed_icon_new (ICON_NAME_HOME); add_place (sidebar, PLACES_BUILT_IN, SECTION_COMPUTER, @@ -4060,15 +4012,6 @@ gtk_places_sidebar_set_trash_is_full (GtkPlacesSidebar *sidebar, gboolean is_ful check_popup_sensitivity (sidebar); } -void -gtk_places_sidebar_set_show_cwd (GtkPlacesSidebar *sidebar, gboolean show_cwd) -{ - g_return_if_fail (GTK_IS_PLACES_SIDEBAR (sidebar)); - - sidebar->show_cwd = !!show_cwd; - update_places (sidebar); -} - void gtk_places_sidebar_set_accept_uri_drops (GtkPlacesSidebar *sidebar, gboolean accept_uri_drops) { diff --git a/gtk/gtkplacessidebar.h b/gtk/gtkplacessidebar.h index da847b2e97..11ad6647ef 100644 --- a/gtk/gtkplacessidebar.h +++ b/gtk/gtkplacessidebar.h @@ -68,8 +68,6 @@ void gtk_places_sidebar_set_show_properties (GtkPlacesSidebar *sidebar, gboolean void gtk_places_sidebar_set_show_trash (GtkPlacesSidebar *sidebar, gboolean show_trash); void gtk_places_sidebar_set_trash_is_full (GtkPlacesSidebar *sidebar, gboolean is_full); -void gtk_places_sidebar_set_show_cwd (GtkPlacesSidebar *sidebar, gboolean show_cwd); - void gtk_places_sidebar_set_accept_uri_drops (GtkPlacesSidebar *sidebar, gboolean accept_uri_drops); void gtk_places_sidebar_add_shortcut (GtkPlacesSidebar *sidebar, GFile *location); -- 2.30.2